#include <string.h>
#include <stdlib.h>
#include "equiposLoad.h"

int equipocount;

int loadEquipos(char const *filename,struct EquipoVars **data_ptr){
	FILE *ptr_file;///create FILE pointer
	ptr_file=fopen(filename,"r");///open file specified in *filename
	if(!ptr_file){
		return 1;
	}
	int maxlinelen;///used to allocate buffer length
	int numlines=getFileInfo(ptr_file,&maxlinelen);///used to allocate equipos array size
	equipocount=numlines;
	struct EquipoVars *data;
	data=(struct EquipoVars*) calloc(numlines,sizeof(struct EquipoVars));///allocate equipo array
	char *buf=(char*) malloc(maxlinelen*sizeof(char));///allocate buffer size
	for(int i=0;i<numlines;i++){
		fgets(buf,maxlinelen,ptr_file);///load a line to buffer
		sscanf(strtok(buf,"-"), "%d", &data[i].id);
		strcpy(data[i].name,strtok(NULL,"\n"));///get next token
	}
	free(buf);
	fclose(ptr_file);
	*data_ptr=data;
	return 0;
}

int writeEquipos(char const *filename,struct EquipoVars *data){
	FILE *ptr_file;
	ptr_file=fopen(filename,"w");
	if(!ptr_file){
		return 1;
	}
	///loop through equipos
	for(int i=0;i<equipocount;i++){
		///print a line
		fprintf(ptr_file,"%02d-%s\n",data[i].id,data[i].name);
	}
	fclose(ptr_file);
	free(data);
	return 0;
}

void addEquipo(struct EquipoVars n,struct EquipoVars **data_ptr){
	///reallocate equipo array size and increment equipocount
	struct EquipoVars *data;
	data=(struct EquipoVars*) realloc(*data_ptr,++equipocount*sizeof(struct EquipoVars));
	data[equipocount-1]=n;
	*data_ptr=data;
}

void rmEquipo(int index,struct EquipoVars **data_ptr){
	struct EquipoVars *data=(struct EquipoVars*) calloc(equipocount-1,sizeof(struct EquipoVars));///allocate new array with one less element
	if(index!=0){
		memcpy(data,*data_ptr,index*sizeof(struct EquipoVars));
	}
	//copy everything after index
	if(index < equipocount){
		memcpy(data + index,*data_ptr + index + 1,(equipocount - index - 1)*sizeof(struct EquipoVars));
	}
	equipocount--;
	free(*data_ptr);
	*data_ptr=data;
}
